/*
 * Partida.h
 *
 *  Created on: Nov 2, 2013
 *      Author: javier
 */

#ifndef PARTIDA_H_
#define PARTIDA_H_

#include <stdio.h>
#include <stdlib.h>     /* srand, rand */
#include <math.h>
#include "Tablero.h"
#include "Pieza.h"
#include "Button.h"
#include "GoldenStar.h"
#include "MiniBar.h"
#include "Posicion.h"
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <iostream>
#include <time.h>       /* time */
#include <algorithm>
#include <string>
#include "JsonLevel.h"


class Partida {
public:
	Partida();
	virtual ~Partida();
	void validarTablero();
	void realizarMovimiento(unsigned int x, unsigned int y);
	int getHorMatches(unsigned int x, unsigned int y);
	int getVerMatches(unsigned int x, unsigned int y);
	void imprimirTablero();
	void bajarGolosinas();
	CeldaBase * getCelda(unsigned int x, unsigned int y);
	void eliminarCeldas();
	unsigned int getFilas();
	unsigned int getColumnas();
	void eliminarGolosinas(Posicion p1);
	void eliminarGolosinas();
	void bajarGolosinasDesde(unsigned int x, unsigned int y);
	bool movimientoValido(unsigned int x, unsigned int y);
	bool intercambiarGolosinas(Posicion p1, Posicion p2);
	void llenarTablero();
	void completarTablero();
	std::vector<CeldaBase*>* getCeldas();
	void limpiarVectores();
	void setearEspecial(unsigned int hMatches, unsigned int vMatches,
			unsigned int x, unsigned int y, Pieza::color c);
	std::vector<Posicion> getPosicionesAEliminar();
	std::vector<Pieza*> getARellenar();
	void eliminarPiezasMismoColor(Pieza::color c);
	std::vector<Posicion> getPosicionesEspeciales();
	std::vector<Pieza*> getEspeciales();
	void eliminarFilaCompleta(unsigned int nFil, unsigned int nCol, std::vector<Posicion>*);
	void eliminarColumnaCompleta(unsigned int nFil, unsigned int nCol, std::vector<Posicion>*);
	bool verificarMatchs();
	int getPuntosJugada();
	void sumarPuntos(int);
	void vaciarPuntosJugada();
	bool hayMatchesPosibles();
	void setMultiplicador(int);
private:
        Tablero miTablero;
		//std::vector<Posicion> bajarDesde;
		std::vector<Posicion> aEliminar;
		std::vector<Pieza*> aRellenar;
		std::vector<Posicion> posEspeciales;
		std::vector<Pieza*> especiales;
		int puntosJugada;
		int multiplicador;

};

#endif /* PARTIDA_H_ */
